import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
import $C from '@/common/config.js';
import $http from '@/common/request.js';
import $U from '@/common/util.js';
export default new Vuex.Store({
	state:{
		loginStatus:false,
		token:'',
		user:{},
		// Socket连接状态
		IsOpen:false,
		// SocketTask
		SocketTask:false,
		// 是否上线（会员id绑定客户端id，验证用户身份，通过则绑定）
		IsOnline:false, 
		// 当前聊天对象（进入聊天页面获取）
		ToUser:{
			user_id:0, // 通过判断user_id是否为0，当前用户处在什么场景下
			username:"",
			userpic:""
		},
		// 聊天会话列表
		chatList:[]
	},
	getters:{
		token(state) {
			return state.token;
		},
		user(state) {
			return state.user;
		}
	},
	mutations:{
		login(state,data) {
			state.loginStatus = true;
			state.token = data.token;
			state.user = data;
			uni.setStorageSync('user',JSON.stringify(data))
		},
		// 退出登录
		logout(state){
			state.loginStatus = false
			state.user = {}
			state.token = false
			uni.removeStorageSync('user');
			uni.$emit('updateIndex')
		},
	},
	actions:{
		async updateChatList({state,dispatch,commit},{data,send}){
			
		},
		// 更新与某个用户聊天内容列表
		async updateChatDetailToUser({state,dispatch,commit},e){
			 console.log('更新与某个用户聊天内容列表',e);
		},
		// 处理接收消息
		handleChatMessage({state,dispatch},data){
			console.log('处理接收消息',data);
			// 全局通知接口
			uni.$emit('UserChat',data);
			// 存储到chatdetail
			dispatch('updateChatDetailToUser',{
				data,
				send:false
			})
			// 更新会话列表
			dispatch('updateChatList',{
				data,
				send:false
			})
		},
		// 关闭socket
		closeSocket({state}){
			if (state.IsOpen){
				state.SocketTask.close();
			}
		},
		// 打开socket
		openSocket({ state,dispatch }){
			// 防止重复连接
			if(state.IsOpen) return
			// 连接
			state.SocketTask = uni.connectSocket({
			    url: $C.websocketUrl,
			    complete: ()=> {}
			});
			if (!state.SocketTask) return;
			// 监听开启
			state.SocketTask.onOpen(()=>{
				// 将连接状态设为已连接
				console.log('将连接状态设为已连接');
				state.IsOpen = true
			})
			// 监听关闭
			state.SocketTask.onClose(()=>{
				console.log('连接已关闭');
				state.IsOpen = false;
				state.SocketTask = false;
				state.IsOnline = false
				// 清空会话列表
				// 更新未读数提示
			})
			// 监听错误
			state.SocketTask.onError(()=>{
				console.log('连接错误');
				state.IsOpen = false;
				state.SocketTask = false;
				state.IsOnline = false
			})
			// 监听接收信息
			state.SocketTask.onMessage((e)=>{
				console.log('接收消息',e);
				// 字符串转json
				let res = JSON.parse(e.data);
				// 绑定返回结果
				if (res.type == 'bind'){
					// 用户绑定
					return dispatch('userBind',res.data)
				}
				// 处理接收信息
				if (res.type !== 'text') return;
				/*
				{
					to_id:1,      // 接收人 
					from_id:12,	  // 发送人id
					from_username:"某某",  // 发送人昵称
					from_userpic:"http://pic136.nipic.com/file/20170725/10673188_152559977000_2.jpg",
					type:"text",	 // 发送类型
					data:"你好啊",	 // 发送内容
					time:151235451   // 接收到的时间
				}
				*/
			   // 处理接收消息
			   dispatch('handleChatMessage',res)
			})
		},
		
	}
})